#ifndef MASTER_QUEUE_HPP
#define MASTER_QUEUE_HPP

#include "../Base/BaseData.hpp"

using namespace base;

template<typename TQueue, typename TElemType>
class MasterQueue {
public:
    virtual ~MasterQueue() = default;

    virtual Status initQueue(TQueue &q) = 0;
    virtual Status destoryQueue(TQueue &q) = 0;
    virtual Status clearQueue(TQueue &q) = 0;
    virtual bool queueEmpty(const TQueue &q) = 0;
    virtual int queueLength(const TQueue &q) = 0;
    virtual TElemType getHead(TQueue &q) = 0;
    virtual Status enQueue(TQueue &q, TElemType e) = 0;
    virtual Status deQueue(TQueue &q, TElemType &e) = 0;
    virtual Status queueTraverse(const TQueue q) = 0;
};

#endif
